#ifndef CAMPAIGNSETTING_H
#define CAMPAIGNSETTING_H

#include <ItemRoot.h>
#include <ItemModel.h>

#include <QObject>
#include <QMap>
#include <QVariant>

class CampaignSetting : public QObject
{
    Q_OBJECT

public:

    CampaignSetting(QObject *parent = 0);
    CampaignSetting(ItemRoot* rootItem, QObject* parent = 0);


    ItemModel* model() const;   // for views to display
    ItemRoot* root() const;     // for utilities (serializer etc...)

    QString name() const;

    QStringList attributes() const;

    QStringList skills() const;
    QString skillAttribute(const QString& skill) const;
    QStringList skillSynergies(const QString& skill) const;

    QStringList feats() const;
    QStringList featRequirements();

    QStringList specials() const;


    QStringList bonusTypes() const; // Base Attack, Saving Throws, Defence Bonus, ...
    QVariantList bonusLevels(const QString& bonusType) const;
    QStringList bonuses(const QString& bonusType, const QString& bonusLevel);


public slots:

    void setName(const QString& name);
    void addAttribute(const QString& name);
    void addSkill(const QString& name);
    void addFeat(const QString& name);
    void addSpecial(const QString& name);

    void addBonusType(const QString& name);
    void addBonusLevel(const QString& bonusType, const QVariant& bonusLevel);


protected:

    ItemRoot* m_rootItem;
    ItemModel* m_itemModel;





};

#endif // CAMPAIGNSETTING_H
